home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / include / linux / slab.h < prev    next >
C/C++ Source or Header  |  2005-10-13  |  4KB  |  131 lines

  1. /*
  2.  * linux/mm/slab.h
  3.  * Written by Mark Hemment, 1996.
  4.  * (markhe@nextd.demon.co.uk)
  5.  */
  6.  
  7. #ifndef _LINUX_SLAB_H
  8. #define    _LINUX_SLAB_H
  9.  
  10. #if    defined(__KERNEL__)
  11.  
  12. typedef struct kmem_cache_s kmem_cache_t;
  13.  
  14. #include    <linux/config.h>    /* kmalloc_sizes.h needs CONFIG_ options */
  15. #include    <linux/gfp.h>
  16. #include    <linux/init.h>
  17. #include    <linux/types.h>
  18. #include    <asm/page.h>        /* kmalloc_sizes.h needs PAGE_SIZE */
  19. #include    <asm/cache.h>        /* kmalloc_sizes.h needs L1_CACHE_BYTES */
  20.  
  21. /* flags for kmem_cache_alloc() */
  22. #define    SLAB_NOFS        GFP_NOFS
  23. #define    SLAB_NOIO        GFP_NOIO
  24. #define    SLAB_ATOMIC        GFP_ATOMIC
  25. #define    SLAB_USER        GFP_USER
  26. #define    SLAB_KERNEL        GFP_KERNEL
  27. #define    SLAB_DMA        GFP_DMA
  28.  
  29. #define SLAB_LEVEL_MASK        GFP_LEVEL_MASK
  30.  
  31. #define    SLAB_NO_GROW        __GFP_NO_GROW    /* don't grow a cache */
  32.  
  33. /* flags to pass to kmem_cache_create().
  34.  * The first 3 are only valid when the allocator as been build
  35.  * SLAB_DEBUG_SUPPORT.
  36.  */
  37. #define    SLAB_DEBUG_FREE        0x00000100UL    /* Peform (expensive) checks on free */
  38. #define    SLAB_DEBUG_INITIAL    0x00000200UL    /* Call constructor (as verifier) */
  39. #define    SLAB_RED_ZONE        0x00000400UL    /* Red zone objs in a cache */
  40. #define    SLAB_POISON        0x00000800UL    /* Poison objects */
  41. #define    SLAB_NO_REAP        0x00001000UL    /* never reap from the cache */
  42. #define    SLAB_HWCACHE_ALIGN    0x00002000UL    /* align objs on a h/w cache lines */
  43. #define SLAB_CACHE_DMA        0x00004000UL    /* use GFP_DMA memory */
  44. #define SLAB_MUST_HWCACHE_ALIGN    0x00008000UL    /* force alignment */
  45. #define SLAB_STORE_USER        0x00010000UL    /* store the last owner for bug hunting */
  46. #define SLAB_RECLAIM_ACCOUNT    0x00020000UL    /* track pages allocated to indicate
  47.                            what is reclaimable later*/
  48. #define SLAB_PANIC        0x00040000UL    /* panic if kmem_cache_create() fails */
  49. #define SLAB_DESTROY_BY_RCU    0x00080000UL    /* defer freeing pages to RCU */
  50.  
  51. /* flags passed to a constructor func */
  52. #define    SLAB_CTOR_CONSTRUCTOR    0x001UL        /* if not set, then deconstructor */
  53. #define SLAB_CTOR_ATOMIC    0x002UL        /* tell constructor it can't sleep */
  54. #define    SLAB_CTOR_VERIFY    0x004UL        /* tell constructor it's a verify call */
  55.  
  56. /* prototypes */
  57. extern void __init kmem_cache_init(void);
  58.  
  59. extern kmem_cache_t *kmem_cache_create(const char *, size_t, size_t, unsigned long,
  60.                        void (*)(void *, kmem_cache_t *, unsigned long),
  61.                        void (*)(void *, kmem_cache_t *, unsigned long));
  62. extern int kmem_cache_destroy(kmem_cache_t *);
  63. extern int kmem_cache_shrink(kmem_cache_t *);
  64. extern void *kmem_cache_alloc(kmem_cache_t *, int);
  65. #ifdef CONFIG_NUMA
  66. extern void *kmem_cache_alloc_node(kmem_cache_t *, int);
  67. #else
  68. static inline void *kmem_cache_alloc_node(kmem_cache_t *cachep, int node)
  69. {
  70.     return kmem_cache_alloc(cachep, GFP_KERNEL);
  71. }
  72. #endif
  73. extern void kmem_cache_free(kmem_cache_t *, void *);
  74. extern unsigned int kmem_cache_size(kmem_cache_t *);
  75.  
  76. /* Size description struct for general caches. */
  77. struct cache_sizes {
  78.     size_t         cs_size;
  79.     kmem_cache_t    *cs_cachep;
  80.     kmem_cache_t    *cs_dmacachep;
  81. };
  82. extern struct cache_sizes malloc_sizes[];
  83. extern void *__kmalloc(size_t, int);
  84.  
  85. static inline void *kmalloc(size_t size, int flags)
  86. {
  87.     if (__builtin_constant_p(size)) {
  88.         int i = 0;
  89. #define CACHE(x) \
  90.         if (size <= x) \
  91.             goto found; \
  92.         else \
  93.             i++;
  94. #include "kmalloc_sizes.h"
  95. #undef CACHE
  96.         {
  97.             extern void __you_cannot_kmalloc_that_much(void);
  98.             __you_cannot_kmalloc_that_much();
  99.         }
  100. found:
  101.         return kmem_cache_alloc((flags & GFP_DMA) ?
  102.             malloc_sizes[i].cs_dmacachep :
  103.             malloc_sizes[i].cs_cachep, flags);
  104.     }
  105.     return __kmalloc(size, flags);
  106. }
  107.  
  108. extern void *kcalloc(size_t, size_t, int);
  109. extern void kfree(const void *);
  110. extern unsigned int ksize(const void *);
  111.  
  112. extern int FASTCALL(kmem_cache_reap(int));
  113. extern int FASTCALL(kmem_ptr_validate(kmem_cache_t *cachep, void *ptr));
  114.  
  115. /* System wide caches */
  116. extern kmem_cache_t    *vm_area_cachep;
  117. extern kmem_cache_t    *mm_cachep;
  118. extern kmem_cache_t    *names_cachep;
  119. extern kmem_cache_t    *files_cachep;
  120. extern kmem_cache_t    *filp_cachep;
  121. extern kmem_cache_t    *fs_cachep;
  122. extern kmem_cache_t    *signal_cachep;
  123. extern kmem_cache_t    *sighand_cachep;
  124. extern kmem_cache_t    *bio_cachep;
  125.  
  126. extern atomic_t slab_reclaim_pages;
  127.  
  128. #endif    /* __KERNEL__ */
  129.  
  130. #endif    /* _LINUX_SLAB_H */
  131.